Clean up map_domain_page().
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 24 May 2007 10:33:39 +0000 (11:33 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 24 May 2007 10:33:39 +0000 (11:33 +0100)
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/hvm/vlapic.c
xen/arch/x86/mm/shadow/multi.c
xen/arch/x86/x86_32/domain_page.c
xen/include/asm-x86/hap.h

index e9d6330f31ee52106d326253ac072452a3920c2a..e9efdda2b4d59707c7f3e5d90751f6f5e0a61a76 100644 (file)
@@ -918,16 +918,16 @@ int vlapic_init(struct vcpu *v)
     vlapic->regs_page = alloc_domheap_page(NULL);
     if ( vlapic->regs_page == NULL )
     {
-        dprintk(XENLOG_ERR, "malloc vlapic regs_page error for vcpu %x\n",
-                v->vcpu_id);
+        dprintk(XENLOG_ERR, "alloc vlapic regs error: %d/%d\n",
+                v->domain->domain_id, v->vcpu_id);
         return -ENOMEM;
     }
 
     vlapic->regs = map_domain_page_global(page_to_mfn(vlapic->regs_page));
     if ( vlapic->regs == NULL )
     {
-        dprintk(XENLOG_ERR, "malloc vlapic regs error for vcpu %x\n",
-                v->vcpu_id);
+        dprintk(XENLOG_ERR, "map vlapic regs error: %d/%d\n",
+                v->domain->domain_id, v->vcpu_id);
        return -ENOMEM;
     }
 
@@ -935,7 +935,8 @@ int vlapic_init(struct vcpu *v)
 
     vlapic_reset(vlapic);
 
-    vlapic->hw.apic_base_msr = MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE;
+    vlapic->hw.apic_base_msr = (MSR_IA32_APICBASE_ENABLE |
+                                APIC_DEFAULT_PHYS_BASE);
     if ( v->vcpu_id == 0 )
         vlapic->hw.apic_base_msr |= MSR_IA32_APICBASE_BSP;
 
index 57e25c829fb178a9ebe79754dd22a563dbd5d79f..cfd4c70c210286561328ca969c6d90a04925df26 100644 (file)
@@ -3487,6 +3487,7 @@ sh_update_cr3(struct vcpu *v, int do_locking)
         v->arch.paging.shadow.guest_vtable = sh_map_domain_page_global(gmfn);
         /* PAGING_LEVELS==4 implies 64-bit, which means that
          * map_domain_page_global can't fail */
+        BUG_ON(v->arch.paging.shadow.guest_vtable == NULL);
     }
     else
         v->arch.paging.shadow.guest_vtable = __linear_l4_table;
@@ -3519,7 +3520,7 @@ sh_update_cr3(struct vcpu *v, int do_locking)
         v->arch.paging.shadow.guest_vtable = sh_map_domain_page_global(gmfn);
         /* Does this really need map_domain_page_global?  Handle the
          * error properly if so. */
-        ASSERT( v->arch.paging.shadow.guest_vtable );
+        BUG_ON(v->arch.paging.shadow.guest_vtable == NULL); /* XXX */
     }
     else
         v->arch.paging.shadow.guest_vtable = __linear_l2_table;
index 59c129ee1339f78a027378995eab9608af0bb89f..fb5bac81c09a50e45cbe1090e6e05eaad5d61c60 100644 (file)
@@ -98,7 +98,7 @@ void *map_domain_page(unsigned long mfn)
         cache->tlbflush_timestamp = tlbflush_current_time();
 
         idx = find_first_zero_bit(cache->inuse, MAPCACHE_ENTRIES);
-        ASSERT(idx < MAPCACHE_ENTRIES);
+        BUG_ON(idx >= MAPCACHE_ENTRIES);
     }
 
     set_bit(idx, cache->inuse);
@@ -218,25 +218,21 @@ void *map_domain_page_global(unsigned long mfn)
 
         idx = find_first_zero_bit(inuse, GLOBALMAP_BITS);
         va = IOREMAP_VIRT_START + (idx << PAGE_SHIFT);
-        if ( va >= FIXADDR_START )
+        if ( unlikely(va >= FIXADDR_START) )
         {
-            va = 0;
-            goto fail;
+            spin_unlock(&globalmap_lock);
+            return NULL;
         }
     }
 
     set_bit(idx, inuse);
     inuse_cursor = idx + 1;
 
-  fail:
     spin_unlock(&globalmap_lock);
 
-    if ( likely(va != 0) )
-    {
-       pl2e = virt_to_xen_l2e(va);
-       pl1e = l2e_to_l1e(*pl2e) + l1_table_offset(va);
-       l1e_write(pl1e, l1e_from_pfn(mfn, __PAGE_HYPERVISOR));
-    }
+    pl2e = virt_to_xen_l2e(va);
+    pl1e = l2e_to_l1e(*pl2e) + l1_table_offset(va);
+    l1e_write(pl1e, l1e_from_pfn(mfn, __PAGE_HYPERVISOR));
 
     return (void *)va;
 }
index 9c070f6fa8765674d25862050f230219afdeb76e..27b47766fd4e608394a4a6bc6d054f22dded35b2 100644 (file)
@@ -48,18 +48,6 @@ hap_unmap_domain_page(void *p)
     unmap_domain_page(p);
 }
 
-static inline void *
-hap_map_domain_page_global(mfn_t mfn)
-{
-    return map_domain_page_global(mfn_x(mfn));
-}
-
-static inline void 
-hap_unmap_domain_page_global(void *p) 
-{
-    unmap_domain_page_global(p);
-}
-
 /************************************************/
 /*           locking for hap code               */
 /************************************************/